package com.dragon.modules.yuegou.model.wallet;

import com.dragon.modules.yuegou.entity.wallet.EntityCardEntity;
import com.dragon.modules.yuegou.enums.CardType;
import com.dragon.modules.yuegou.enums.OwnerType;
import com.dragon.modules.yuegou.enums.wallet.EntityCardCardNoRules;
import com.dragon.modules.yuegou.enums.wallet.EntityCardCardPwdRules;
import com.dragon.modules.yuegou.enums.wallet.EntityCardCardStyle;
import com.dragon.modules.yuegou.enums.wallet.EntityCardCheckStatus;
import com.dragon.modules.yuegou.enums.wallet.EntityCardMakeCardWay;
import com.dragon.modules.yuegou.enums.wallet.EntityCardPeriodUnit;
import com.dragon.modules.yuegou.enums.wallet.EntityCardScope;
import com.dragon.modules.yuegou.enums.wallet.EntityCardTimeLimitType;
import io.swagger.annotations.ApiModelProperty;
import org.hibernate.validator.constraints.Length;

import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
import java.math.BigDecimal;
import java.time.LocalDate;
import java.time.LocalDateTime;

/**
 * 实体卡模型类
 * 
 * @author pbuilder generated
 * @date 2021-03-25 19:43:26
 * @company sgy
 * @version 2.0
 * @see Length 长度限制
 * @see NotNull 对象非空
 * @see NotEmpty 字符串、集合、表、数组非空
 */
public class EntityCard extends EntityCardEntity {

	@ApiModelProperty("商圈名称")
	private String busdName;
	@ApiModelProperty("总面值")
	private BigDecimal totalAmount;

	@ApiModelProperty("悦卡类别：0-福利卡-WELFARE_CARD、1-预付卡-PREPAY_CARD")
	private CardType cardType;

	@ApiModelProperty("是否存在注销：false-不存在，true-存在")
	private Boolean cancelled;

	public Boolean getCancelled() {
		return cancelled;
	}

	public void setCancelled(Boolean cancelled) {
		this.cancelled = cancelled;
	}

	public CardType getCardType() {
		return cardType;
	}

	public void setCardType(CardType cardType) {
		this.cardType = cardType;
	}

	public BigDecimal getTotalAmount() {
		return totalAmount;
	}

	public void setTotalAmount(BigDecimal totalAmount) {
		this.totalAmount = totalAmount;
	}

	public String getBusdName() {
		return busdName;
	}

	public void setBusdName(String busdName) {
		this.busdName = busdName;
	}

	/**
	 * 构造一个空实体卡模型对象
	 */
	public EntityCard(){
		super();
	}
	
	/**
	 * 依据实体对象的信息构造一个实体卡模型对象
	 * 
	 * @param entity 实体对象
	 */
	public EntityCard(EntityCardEntity entity){
		super(entity);
	}

	/**
	 * 依据其它对象的信息构造一个实体卡模型对象
	 * 
	 * @param other 其它对象
	 */
	public EntityCard(EntityCard other){
		super(other);
	}


	@Override
	public String getId() {
    	return id;
    }

    /**
	 * 设置id
	 * 
	 * @param id id
	 * @return 当前对象
	 */
    public EntityCard id(String id) {
    	this.id = id;
    	return this;
    }

	@Override
	public String getCardTemplateId() {
    	return cardTemplateId;
    }

    /**
	 * 设置悦卡id
	 * 
	 * @param cardTemplateId 悦卡id
	 * @return 当前对象
	 */
    public EntityCard cardTemplateId(String cardTemplateId) {
    	this.cardTemplateId = cardTemplateId;
    	return this;
    }

	@Override
	public String getCardTemplateTitle() {
    	return cardTemplateTitle;
    }

    /**
	 * 设置悦卡名称
	 * 
	 * @param cardTemplateTitle 悦卡名称
	 * @return 当前对象
	 */
    public EntityCard cardTemplateTitle(String cardTemplateTitle) {
    	this.cardTemplateTitle = cardTemplateTitle;
    	return this;
    }

	@Override
	public OwnerType getOwnerType() {
    	return ownerType;
    }

    /**
	 * 设置[全局枚举]所有者类型：0-平台-PLATFORM、1-集团-GROUP、2-商圈-BUSINESS_DISTRICT、3-商户-MERCHANT
	 * 
	 * @param ownerType [全局枚举]所有者类型：0-平台-PLATFORM、1-集团-GROUP、2-商圈-BUSINESS_DISTRICT、3-商户-MERCHANT
	 * @return 当前对象
	 */
    public EntityCard ownerType(OwnerType ownerType) {
    	this.ownerType = ownerType;
    	return this;
    }

	@Override
	public String getGroupId() {
    	return groupId;
    }

    /**
	 * 设置集团ID
	 * 
	 * @param groupId 集团ID
	 * @return 当前对象
	 */
    public EntityCard groupId(String groupId) {
    	this.groupId = groupId;
    	return this;
    }

	@Override
	public String getBusdId() {
    	return busdId;
    }

    /**
	 * 设置商圈ID
	 * 
	 * @param busdId 商圈ID
	 * @return 当前对象
	 */
    public EntityCard busdId(String busdId) {
    	this.busdId = busdId;
    	return this;
    }

	@Override
	public String getMerchantId() {
    	return merchantId;
    }

    /**
	 * 设置商户ID
	 * 
	 * @param merchantId 商户ID
	 * @return 当前对象
	 */
    public EntityCard merchantId(String merchantId) {
    	this.merchantId = merchantId;
    	return this;
    }

	@Override
	public BigDecimal getAmount() {
    	return amount;
    }

    /**
	 * 设置悦卡面值
	 * 
	 * @param amount 悦卡面值
	 * @return 当前对象
	 */
    public EntityCard amount(BigDecimal amount) {
    	this.amount = amount;
    	return this;
    }

	@Override
	public String getImgUrl() {
    	return imgUrl;
    }

    /**
	 * 设置悦卡图片地址
	 * 
	 * @param imgUrl 悦卡图片地址
	 * @return 当前对象
	 */
    public EntityCard imgUrl(String imgUrl) {
    	this.imgUrl = imgUrl;
    	return this;
    }

	@Override
	public String getDetailImgUrl() {
    	return detailImgUrl;
    }

    /**
	 * 设置悦卡详情图片地址
	 * 
	 * @param detailImgUrl 悦卡详情图片地址
	 * @return 当前对象
	 */
    public EntityCard detailImgUrl(String detailImgUrl) {
    	this.detailImgUrl = detailImgUrl;
    	return this;
    }

	@Override
	public EntityCardTimeLimitType getTimeLimitType() {
    	return timeLimitType;
    }

    /**
	 * 设置[枚举]时间限制类型：0-固定时段-FIXED_RANGE、1-有效时长-PERIOD
	 * 
	 * @param timeLimitType [枚举]时间限制类型：0-固定时段-FIXED_RANGE、1-有效时长-PERIOD
	 * @return 当前对象
	 */
    public EntityCard timeLimitType(EntityCardTimeLimitType timeLimitType) {
    	this.timeLimitType = timeLimitType;
    	return this;
    }

	@Override
	public LocalDate getBeginTime() {
    	return beginTime;
    }

    /**
	 * 设置有效期开始时间 （与有效天数二选一）
	 * 
	 * @param beginTime 有效期开始时间 （与有效天数二选一）
	 * @return 当前对象
	 */
    public EntityCard beginTime(LocalDate beginTime) {
    	this.beginTime = beginTime;
    	return this;
    }

	@Override
	public LocalDate getEndTime() {
    	return endTime;
    }

    /**
	 * 设置有效期结束时间（与有效天数二选一）
	 * 
	 * @param endTime 有效期结束时间（与有效天数二选一）
	 * @return 当前对象
	 */
    public EntityCard endTime(LocalDate endTime) {
    	this.endTime = endTime;
    	return this;
    }

	@Override
	public Integer getPeriod() {
    	return period;
    }

    /**
	 * 设置有效时长
	 * 
	 * @param period 有效时长
	 * @return 当前对象
	 */
    public EntityCard period(Integer period) {
    	this.period = period;
    	return this;
    }

	@Override
	public EntityCardPeriodUnit getPeriodUnit() {
    	return periodUnit;
    }

    /**
	 * 设置[枚举]时长单位：0-分钟-MINUTE、1-小时-HOUR、2-天-DAY、3-月-MONTH、4-年-YEAR
	 * 
	 * @param periodUnit [枚举]时长单位：0-分钟-MINUTE、1-小时-HOUR、2-天-DAY、3-月-MONTH、4-年-YEAR
	 * @return 当前对象
	 */
    public EntityCard periodUnit(EntityCardPeriodUnit periodUnit) {
    	this.periodUnit = periodUnit;
    	return this;
    }

	@Override
	public BigDecimal getLimitAmount() {
    	return limitAmount;
    }

    /**
	 * 设置每日限额(-1.00表示不限额）
	 * 
	 * @param limitAmount 每日限额(-1.00表示不限额）
	 * @return 当前对象
	 */
    public EntityCard limitAmount(BigDecimal limitAmount) {
    	this.limitAmount = limitAmount;
    	return this;
    }

	@Override
	public Boolean getCanRefund() {
    	return canRefund;
    }

    /**
	 * 设置是否可以退卡
	 * 
	 * @param canRefund 是否可以退卡
	 * @return 当前对象
	 */
    public EntityCard canRefund(Boolean canRefund) {
    	this.canRefund = canRefund;
    	return this;
    }

	@Override
	public BigDecimal getRefundRate() {
    	return refundRate;
    }

    /**
	 * 设置退款扣款手续费率比例(0.00~1.00)
	 * 
	 * @param refundRate 退款扣款手续费率比例(0.00~1.00)
	 * @return 当前对象
	 */
    public EntityCard refundRate(BigDecimal refundRate) {
    	this.refundRate = refundRate;
    	return this;
    }

	@Override
	public Boolean getNeedServiceFee() {
    	return needServiceFee;
    }

    /**
	 * 设置是否收取服务费
	 * 
	 * @param needServiceFee 是否收取服务费
	 * @return 当前对象
	 */
    public EntityCard needServiceFee(Boolean needServiceFee) {
    	this.needServiceFee = needServiceFee;
    	return this;
    }

	@Override
	public EntityCardScope getScope() {
    	return scope;
    }

    /**
	 * 设置[枚举]使用范围：0-全部-ALL、1-商圈-BUSINESS_DISTRICT、2-商户-MERCHANT
	 * 
	 * @param scope [枚举]使用范围：0-全部-ALL、1-商圈-BUSINESS_DISTRICT、2-商户-MERCHANT
	 * @return 当前对象
	 */
    public EntityCard scope(EntityCardScope scope) {
    	this.scope = scope;
    	return this;
    }

	@Override
	public String getDescription() {
    	return description;
    }

    /**
	 * 设置悦卡描述
	 * 
	 * @param description 悦卡描述
	 * @return 当前对象
	 */
    public EntityCard description(String description) {
    	this.description = description;
    	return this;
    }

	@Override
	public EntityCardCardNoRules getCardNoRules() {
    	return cardNoRules;
    }

    /**
	 * 设置[枚举]卡号规则：12-12位-TWELVE、13-13位-THIRTEEN、14-14位-FOURTEEN、15-15位-FIFTEEN、16-16位-SIXTEEN
	 * 
	 * @param cardNoRules [枚举]卡号规则：12-12位-TWELVE、13-13位-THIRTEEN、14-14位-FOURTEEN、15-15位-FIFTEEN、16-16位-SIXTEEN
	 * @return 当前对象
	 */
    public EntityCard cardNoRules(EntityCardCardNoRules cardNoRules) {
    	this.cardNoRules = cardNoRules;
    	return this;
    }

	@Override
	public EntityCardCardPwdRules getCardPwdRules() {
    	return cardPwdRules;
    }

    /**
	 * 设置[枚举]卡密码规则：6-6位-SIX、7-7位-SEVEN、8-8位-EIGHT
	 * 
	 * @param cardPwdRules [枚举]卡密码规则：6-6位-SIX、7-7位-SEVEN、8-8位-EIGHT
	 * @return 当前对象
	 */
    public EntityCard cardPwdRules(EntityCardCardPwdRules cardPwdRules) {
    	this.cardPwdRules = cardPwdRules;
    	return this;
    }

	@Override
	public EntityCardMakeCardWay getMakeCardWay() {
    	return makeCardWay;
    }

    /**
	 * 设置[枚举]制卡方式：0-平台制卡-PLATFORM、1-自己制卡-ONESELF
	 * 
	 * @param makeCardWay [枚举]制卡方式：0-平台制卡-PLATFORM、1-自己制卡-ONESELF
	 * @return 当前对象
	 */
    public EntityCard makeCardWay(EntityCardMakeCardWay makeCardWay) {
    	this.makeCardWay = makeCardWay;
    	return this;
    }

	@Override
	public Integer getMakeCardNum() {
    	return makeCardNum;
    }

    /**
	 * 设置制卡数量
	 * 
	 * @param makeCardNum 制卡数量
	 * @return 当前对象
	 */
    public EntityCard makeCardNum(Integer makeCardNum) {
    	this.makeCardNum = makeCardNum;
    	return this;
    }

	@Override
	public BigDecimal getMakeCardServiceFee() {
    	return makeCardServiceFee;
    }

    /**
	 * 设置制卡服务费：手动输入
	 * 
	 * @param makeCardServiceFee 制卡服务费：手动输入
	 * @return 当前对象
	 */
    public EntityCard makeCardServiceFee(BigDecimal makeCardServiceFee) {
    	this.makeCardServiceFee = makeCardServiceFee;
    	return this;
    }

	@Override
	public EntityCardCardStyle getCardStyle() {
    	return cardStyle;
    }

    /**
	 * 设置[枚举]制卡样式：0-刮刮卡-SCRATCH_CARDS
	 * 
	 * @param cardStyle [枚举]制卡样式：0-刮刮卡-SCRATCH_CARDS
	 * @return 当前对象
	 */
    public EntityCard cardStyle(EntityCardCardStyle cardStyle) {
    	this.cardStyle = cardStyle;
    	return this;
    }

	@Override
	public String getCardPositiveUrl() {
    	return cardPositiveUrl;
    }

    /**
	 * 设置卡正面
	 * 
	 * @param cardPositiveUrl 卡正面
	 * @return 当前对象
	 */
    public EntityCard cardPositiveUrl(String cardPositiveUrl) {
    	this.cardPositiveUrl = cardPositiveUrl;
    	return this;
    }

	@Override
	public String getCardReverseUrl() {
    	return cardReverseUrl;
    }

    /**
	 * 设置卡反面
	 * 
	 * @param cardReverseUrl 卡反面
	 * @return 当前对象
	 */
    public EntityCard cardReverseUrl(String cardReverseUrl) {
    	this.cardReverseUrl = cardReverseUrl;
    	return this;
    }

	@Override
	public String getRemark() {
    	return remark;
    }

    /**
	 * 设置备注
	 * 
	 * @param remark 备注
	 * @return 当前对象
	 */
    public EntityCard remark(String remark) {
    	this.remark = remark;
    	return this;
    }

	@Override
	public Integer getSort() {
    	return sort;
    }

    /**
	 * 设置排序
	 * 
	 * @param sort 排序
	 * @return 当前对象
	 */
    public EntityCard sort(Integer sort) {
    	this.sort = sort;
    	return this;
    }

	@Override
	public String getCreatedBy() {
    	return createdBy;
    }

    /**
	 * 设置
	 * 
	 * @param createdBy 
	 * @return 当前对象
	 */
    public EntityCard createdBy(String createdBy) {
    	this.createdBy = createdBy;
    	return this;
    }

	@Override
	public String getCreatedByName() {
    	return createdByName;
    }

    /**
	 * 设置创建人名称
	 * 
	 * @param createdByName 创建人名称
	 * @return 当前对象
	 */
    public EntityCard createdByName(String createdByName) {
    	this.createdByName = createdByName;
    	return this;
    }

	@Override
	public LocalDateTime getCreatedTime() {
    	return createdTime;
    }

    /**
	 * 设置
	 * 
	 * @param createdTime 
	 * @return 当前对象
	 */
    public EntityCard createdTime(LocalDateTime createdTime) {
    	this.createdTime = createdTime;
    	return this;
    }

	@Override
	public Boolean getDel() {
    	return del;
    }

    /**
	 * 设置逻辑删除，1表示已删除,0表示未删除
	 * 
	 * @param del 逻辑删除，1表示已删除,0表示未删除
	 * @return 当前对象
	 */
    public EntityCard del(Boolean del) {
    	this.del = del;
    	return this;
    }

	@Override
	public String getDelBy() {
    	return delBy;
    }

    /**
	 * 设置删除人ID
	 * 
	 * @param delBy 删除人ID
	 * @return 当前对象
	 */
    public EntityCard delBy(String delBy) {
    	this.delBy = delBy;
    	return this;
    }

	@Override
	public LocalDateTime getDelTime() {
    	return delTime;
    }

    /**
	 * 设置删除时间
	 * 
	 * @param delTime 删除时间
	 * @return 当前对象
	 */
    public EntityCard delTime(LocalDateTime delTime) {
    	this.delTime = delTime;
    	return this;
    }

	@Override
	public EntityCardCheckStatus getCheckStatus() {
    	return checkStatus;
    }

    /**
	 * 设置[枚举]审核状态：0-未付款-UNPAY、1-审核中-CHECKING、2-已完成-SUCCESSED、3-已驳回-REJECTED、4-待收货-WAIT_RECEIVING、5-待激活-ACTIVATE、6-废弃-ABANDONED
	 * 
	 * @param checkStatus [枚举]审核状态：0-未付款-UNPAY、1-审核中-CHECKING、2-已完成-SUCCESSED、3-已驳回-REJECTED、4-待收货-WAIT_RECEIVING、5-待激活-ACTIVATE、6-废弃-ABANDONED
	 * @return 当前对象
	 */
    public EntityCard checkStatus(EntityCardCheckStatus checkStatus) {
    	this.checkStatus = checkStatus;
    	return this;
    }

	@Override
	public Long getCheckBy() {
    	return checkBy;
    }

    /**
	 * 设置审核人
	 * 
	 * @param checkBy 审核人
	 * @return 当前对象
	 */
    public EntityCard checkBy(Long checkBy) {
    	this.checkBy = checkBy;
    	return this;
    }

	@Override
	public String getCheckName() {
    	return checkName;
    }

    /**
	 * 设置审核名称
	 * 
	 * @param checkName 审核名称
	 * @return 当前对象
	 */
    public EntityCard checkName(String checkName) {
    	this.checkName = checkName;
    	return this;
    }

	@Override
	public LocalDateTime getCheckTime() {
    	return checkTime;
    }

    /**
	 * 设置审核时间
	 * 
	 * @param checkTime 审核时间
	 * @return 当前对象
	 */
    public EntityCard checkTime(LocalDateTime checkTime) {
    	this.checkTime = checkTime;
    	return this;
    }

	@Override
	public String getCheckRemark() {
    	return checkRemark;
    }

    /**
	 * 设置审核备注
	 * 
	 * @param checkRemark 审核备注
	 * @return 当前对象
	 */
    public EntityCard checkRemark(String checkRemark) {
    	this.checkRemark = checkRemark;
    	return this;
    }
}
